package com.hyper_yang._05_juc.chap05;

import java.util.Random;
import java.util.concurrent.CountDownLatch;

/**
 * 倒计数器：
 * 适合执行一些子任务后，再执行一个总的任务业务场景。
 * <p>
 * 例子：6个同学陆续离开教室后值班同学才可以关门。
 */
public class CountDownLatchDemo {

    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(6); //6个子任务。表示有6个同学。

        //执行各个子任务的地方
        for (int i = 1; i <= 6; i++) {
            new Thread(() -> {
                System.out.println(Thread.currentThread().getName() + "\t" + "---同学在认真学习...");
                try {
                    Thread.sleep(new Random().nextInt(10)); //模拟在学习
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "\t" + "---离开教室...");
                countDownLatch.countDown(); //倒计数  -1
            }, "同学-" + i).start();
        }

        countDownLatch.await(); //阻塞   总任务需要等待子任务都完成，再执行总任务。

        //执行总任务地方
        System.out.println(Thread.currentThread().getName() + "\t" + "---值班同学来锁门");
    }
}
